package log

import (
	"fmt"
	log2 "log"
)

type LogProcFunc func(content string)

var (
	logLevel    = 0 //0: error, 1: info, 2: debug
	ErrorFunc   LogProcFunc
	DebugFunc   LogProcFunc
	LogInfoFunc LogProcFunc
)

func SetLogLevel(level int) {
	logLevel = level
}

func RegError(handle LogProcFunc) {
	ErrorFunc = handle
}

func RegDebug(handle LogProcFunc) {
	DebugFunc = handle
}

func RegInfo(handle LogProcFunc) {
	LogInfoFunc = handle
}

// Error 日志输出和官方fmt.Print、fmt.Printf使用一致
func Error(a ...any) {
	if a[0] != nil {
		if ErrorFunc != nil {
			ErrorFunc(fmt.Sprint(a...))
			return
		}
		log2.Println(a...)
	}
}

// Errorf 日志输出和官方fmt.Print、fmt.Printf使用一致
func Errorf(format string, a ...any) {
	if len(a) > 0 && a[0] != nil {
		if ErrorFunc != nil {
			ErrorFunc(fmt.Sprintf(format, a...))
			return
		}
		log2.Printf(format, a...)
		return
	}
	Error(format)
}

// LogInfo 日志输出和官方fmt.Print、fmt.Printf使用一致
func Info(a ...any) {
	if logLevel < 1 {
		return
	}
	if a[0] != nil {
		if LogInfoFunc != nil {
			LogInfoFunc(fmt.Sprint(a...))
			return
		}
		log2.Println(a...)
	}
}

// LogInfoF 日志输出和官方fmt.Print、fmt.Printf使用一致
func Infof(format string, a ...any) {
	if logLevel < 1 {
		return
	}
	if len(a) > 0 && a[0] != nil {
		if LogInfoFunc != nil {
			LogInfoFunc(fmt.Sprintf(format, a...))
			return
		}
		log2.Printf(format, a...)
		return
	}
	Info(format)
}

// Debug 日志输出和官方fmt.Print、fmt.Printf使用一致
func Debug(a ...any) {
	if logLevel < 2 {
		return
	}
	if a[0] != nil {
		if DebugFunc != nil {
			DebugFunc(fmt.Sprint(a...))
			return
		}
		log2.Println(a...)
	}
}

// DebugF 日志输出和官方fmt.Print、fmt.Printf使用一致
func Debugf(format string, a ...any) {
	if logLevel < 2 {
		return
	}
	if len(a) > 0 && a[0] != nil {
		if DebugFunc != nil {
			DebugFunc(fmt.Sprintf(format, a...))
			return
		}
		log2.Printf(format, a...)
		return
	}
	Debug(format)
}
